<?php


// 判断是否登录的方法
function checkLogin(){
    // 只有登录了 才显示 没有登录跳转到登录页面 强行让你登录
  session_start();
  //  $_SESSION['isLogin']  1 代表你登录了 
  if(!isset( $_SESSION['isLogin'] ) ||  $_SESSION['isLogin']!=1 ){
      // 你没有登录 跳转
      header("location:login.php");
  }
}
// 连接数据库
function connect(){
    $connect=mysqli_connect(DB_HOST,DB_USER,DB_PWD,DB_NAME);
    return $connect;
}

// 查询  调用函数的地方就得到了 那个函数的返回值
// query()
function query($connect,$sql){
    $result=mysqli_query($connect,$sql);//结果集
    return fetch( $result );
}

// 转成成二维数组
function fetch($result){
    $arr=[];
    while($row=mysqli_fetch_assoc($result)){
        $arr[]=$row;
    }
    return $arr;
}


function verify($type='str'){
    if($type=='str'){
        verify_str();
    }else{
        verify_math();
    }
}

// 字符串验证码
function verify_str($name='verify'){
    // 开启session
    session_start();
    //1.创建黑色画布
    $image = imagecreatetruecolor(100, 30);
     
    //2.为画布定义(背景)颜色
    $bgcolor = imagecolorallocate($image, 255, 255, 255);
     
    //3.填充颜色
    imagefill($image, 0, 0, $bgcolor);
     
    // 4.设置验证码内容
    //4.1 定义验证码的内容
    $content = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
     
    //4.1 创建一个变量存储产生的验证码数据，便于用户提交核对
    $captcha = "";
    for ($i = 0; $i < 4; $i++) {
        // 字体大小
        $fontsize = 10;
        // 字体颜色
        $fontcolor = imagecolorallocate($image, mt_rand(0, 120), mt_rand(0, 120), mt_rand(0, 120));
        // 设置字体内容
        $fontcontent = substr($content, mt_rand(0, strlen($content)), 1);
        $captcha .= $fontcontent;
        // 显示的坐标
        $x = ($i * 100 / 4) + mt_rand(5, 10);
        $y = mt_rand(5, 10);
        // 填充内容到画布中
        imagestring($image, $fontsize, $x, $y, $fontcontent, $fontcolor);
    }
    $_SESSION[$name] = $captcha;
    file_put_contents('code.txt', $_SESSION[$name]);
     
    //4.3 设置背景干扰元素
    for ($i = 0; $i < 200; $i++) {
        // 随机生成颜色
        $pointcolor = imagecolorallocate($image, mt_rand(50, 200), mt_rand(50, 200), mt_rand(50, 200));
        // 再画布上画点
        imagesetpixel($image, mt_rand(1, 99), mt_rand(1, 29), $pointcolor);
    }
     
    //4.4 设置干扰线
    for ($i = 0; $i < 3; $i++) {
        $linecolor = imagecolorallocate($image, mt_rand(50, 200), mt_rand(50, 200), mt_rand(50, 200));
        imageline($image, mt_rand(1, 99), mt_rand(1, 29), mt_rand(1, 99), mt_rand(1, 29), $linecolor);
    }
     
    //5.向浏览器输出图片头信息
    header('content-type:image/png');
     
    //6.输出图片到浏览器
    imagepng($image);
     
    //7.销毁图片
    imagedestroy($image);
}


// 数学运算验证码
function verify_math($name='verify'){

    // 开启session
    session_start();
    //1.创建黑色画布
    $image = imagecreatetruecolor(100, 30);
     
    //2.为画布定义(背景)颜色
    $bgcolor = imagecolorallocate($image, 255, 255, 255);
     
    //3.填充颜色
    imagefill($image, 0, 0, $bgcolor);
     
    // 4.设置验证码内容
    //4.1 定义验证码的内容

    // 生成两个随机数参与运算
    $rand1=mt_rand(1,9);
    $rand2=mt_rand(1,9);

    // 运算符
    $operator_arr=array('+','-','*');
    $operator=$operator_arr[array_rand($operator_arr)];
    // 数学表达式的组成部分：两个随机数，一个运算符，一个等号
    $num_arr=array($rand1,$operator,$rand2,'=');

    for($i=0;$i<count($num_arr);$i++){
        $x = ($i * 100 / 4) + mt_rand(5, 10);
        $y = mt_rand(5, 10);
        $fontsize = mt_rand(1,12); 
        $captcha = $num_arr[$i];
         //字体颜色
        $fontcolor = imagecolorallocate($image, mt_rand(0, 120), mt_rand(0, 120), mt_rand(0, 120));
        imagestring($image, $fontsize, $x, $y, $captcha, $fontcolor);
    }
    switch ($operator) {
        case '+':
            $result=$rand1+$rand2;
            break;
         case '-':
            $result=$rand1-$rand2;
            break;    
         case '*':
            $result=$rand1*$rand2;
            break;
    }
    // 将计算结果写入session
    $_SESSION[$name] = $result;
    file_put_contents('code.txt', $_SESSION[$name]);
     
    //4.3 设置背景干扰元素
    for ($i = 0; $i < 200; $i++) {
        // 随机生成颜色
        $pointcolor = imagecolorallocate($image, mt_rand(50, 200), mt_rand(50, 200), mt_rand(50, 200));
        // 再画布上画点
        imagesetpixel($image, mt_rand(1, 99), mt_rand(1, 29), $pointcolor);
    }
     
    //4.4 设置干扰线
    for ($i = 0; $i < 3; $i++) {
        $linecolor = imagecolorallocate($image, mt_rand(50, 200), mt_rand(50, 200), mt_rand(50, 200));
        imageline($image, mt_rand(1, 99), mt_rand(1, 29), mt_rand(1, 99), mt_rand(1, 29), $linecolor);
    }
     
    //5.向浏览器输出图片头信息
    header('content-type:image/png');
     
    //6.输出图片到浏览器
    imagepng($image);
     
    //7.销毁图片
    imagedestroy($image);
}





?>